package org.execute.tool.文件处理;

/**
 * @Author: jianyong.zhu
 * @Description: 文件夹名称提取器
 */
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class FileFolderNameExtractor {

    // 程序入口，主方法
    public static void main(String[] args) {
        // 指定要遍历的文件夹路径（请根据实际情况修改）
        String folderPath = "E:\\java\\socialboosting\\src\\main\\resources\\static";
        // 创建当前类的实例
        FileFolderNameExtractor extractor = new FileFolderNameExtractor();
        // 调用提取方法，从指定路径开始，初始层级为0
        extractor.extractNames(folderPath, 0);
    }

    /**
     * 递归提取并打印文件夹和文件名称
     * @param folderPath 当前处理的文件夹路径
     * @param level 当前文件夹的层级，用于缩进显示
     */
    public void extractNames(String folderPath, int level) {
        // 生成与层级对应的缩进字符串，每层缩进两个空格
        String s = "";
        for (int i = 0; i < level; i++) {
            s += "  ";
        }
        try {
            // 获取当前文件夹路径对应的Path对象
            Path path = Paths.get(folderPath);

            // 列出当前文件夹下所有的普通文件，并收集到List中
            List<Path> files = Files.list(path)
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toList());

            // 列出当前文件夹下所有的子文件夹，并收集到List中
            List<Path> folders = Files.list(path)
                    .filter(Files::isDirectory)
                    .collect(Collectors.toList());

            // 遍历所有子文件夹
            for (Path folder : folders) {
                // 打印当前层级的文件夹名称（带缩进）
                System.out.println(s + folder.getFileName());
                // 递归调用，处理子文件夹，层级加1
                extractNames(folder.toString(), level + 1);
            }

            // 遍历所有文件
            for (Path file : files) {
                // 打印当前层级的文件信息：带缩进、双星号标记、文件名、以及完整路径
                System.out.println(s + "**" + file.getFileName() + "——" + file.toString());
            }

        } catch (IOException e) {
            // 如果发生IO异常，打印异常堆栈信息
            e.printStackTrace();
        }
    }
}
